SMS pres NOKIA 7650

Otázka od: Pavel Z.

2. 8. 2004 8:32

Ahoj chalani,

s pouzitim unity Synaser od SYNAPSE a komponenty TText2pdu se pokousim
komunikovat se svym mobilem a zkousim poslat SMS z PC.

Mate nekdo s timto zkusenosti a poradite mi proc mi to nejde ?
Normalne se PC a mobil spoji, ale nejde AT prikaz s odesilanim SMS.
Nevim, mozna delam neco spatne a potrebuji nakopnout.

prikladam proceduru

procedure TForm1.btTestClick(Sender: TObject);
var
com:TBlockSerial;
pdu: tpdu;
begin
memo1.Clear;
com:=TBlockSerial.Create;
com.Connect('COM'+lbed1.Text);
com.config(115200, 8, 'N', 0, false, true);
com.ATCommand('AT+CMGL=1' );
if (com.LastError <> 0) or (not com.ATResult) then
memo1.Lines.Add('chyba: ' + InTtoStr(com.LastError) + ' - ' +
com.GetErrorDesc(com.LastError))
else
begin
memo1.Lines.Add('spojeno');
application.ProcessMessages;
sleep(1000);
pdu := Text2pdu1.texttosms('+420602909909','+420723401815','prvni SMS');
memo1.Lines.Add('sms pdu format :'+pdu[1]);
memo1.Lines.Add('delka sms :'+pdu[2]);
com.ATCommand('AT+CMGS='+pdu[2]+#13+pdu[1]+#26);
if com.ATResult then memo1.Lines.Add('odeslani SMS vyslo') else
memo1.Lines.Add('odeslani SMS nevyslo');
end;
com.Free;
end;

dekuji za help

P.


Odpovedá: Jan Novak

2. 8. 2004 9:57

> com.config(115200, 8, 'N', 0, false, true);

Umi ta Nokia tolik? Zkus 57600

Pripoj se hyperterminalem a zkus ty AT prikazy napsat rucne. Kdyz se
nedovtipis sam, tak v dalsim dotazu je potreba presne uvest ty
odpovedi.

Nestaci jen rict 'nejde to', je potreba napsat
' v tomto okamziku
misto ocekavaneho ... se stalo ...'


Odpovedá: Pavel Z.

2. 8. 2004 11:29

Promin, ale nevidim nikde v Hyperteminalu moznost odesilat AT prikazy k
nalezene nokii. Delam to poprve, tak neznam vse.
 
Jak jsem uvedl tu proceduru, tak
Prikaz com.ATCommand('AT+CMGL=1' ); probehne ok

Az

pdu := Text2pdu1.texttosms('+420602909909','+420723401815','prvni SMS');
memo1.Lines.Add('sms pdu format :'+pdu[1]);
memo1.Lines.Add('delka sms :'+pdu[2]);
com.ATCommand('AT+CMGS='+pdu[2]+#13+pdu[1]+#26);

tady to neprobehne ok

P.

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Jan Novak
Sent: Monday, August 02, 2004 10:57 AM
To: delphi-l@clexpert.cz
Subject: Re: SMS pres NOKIA 7650

> com.config(115200, 8, 'N', 0, false, true);

Umi ta Nokia tolik? Zkus 57600

Pripoj se hyperterminalem a zkus ty AT prikazy napsat rucne. Kdyz se
nedovtipis sam, tak v dalsim dotazu je potreba presne uvest ty
odpovedi.

Nestaci jen rict 'nejde to', je potreba napsat
' v tomto okamziku
misto ocekavaneho ... se stalo ...'




Odpovedá: Ing. Radek Tomsik

2. 8. 2004 11:32

Zkousel jsem to s vice mobily a spolehlive chodilo 19200 kbps ...

Radek

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Jan Novak
Sent: Monday, August 02, 2004 10:57 AM
To: delphi-l@clexpert.cz
Subject: Re: SMS pres NOKIA 7650

> com.config(115200, 8, 'N', 0, false, true);

Umi ta Nokia tolik? Zkus 57600



Odpovedá: Ing. Radek Tomsik

2. 8. 2004 11:45

Staci kdyz nastavis parametry hyperterminalu tak jak potrebujes a pak
jen pises do okna napr. ATI0 ENTER a cekal na odpoved od mobilu

Jinak problem mas v tom, ze mobilu toho cpes moc naraz !!!

Musis mu poslat 'AT+CMGS=' + pdu[2] + #13 , potom pockat na jeho
odpoved, tj. mobil ti hodi znak ">" a teprve potom mu muzes poslat
pdu[1] + #26

Jen nevim co je pdu[2] a pdu[1] .... pdu[2] by mela byt delka sms a
pdu[1] vlastni obsah sms ...

Radek

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Pavel Z.
Sent: Monday, August 02, 2004 12:29 PM
To: delphi-l@clexpert.cz
Subject: Re: SMS pres NOKIA 7650

Promin, ale nevidim nikde v Hyperteminalu moznost odesilat AT prikazy k
nalezene nokii. Delam to poprve, tak neznam vse.
 
Jak jsem uvedl tu proceduru, tak
Prikaz com.ATCommand('AT+CMGL=1' ); probehne ok

Az

pdu := Text2pdu1.texttosms('+420602909909','+420723401815','prvni SMS');
memo1.Lines.Add('sms pdu format :'+pdu[1]);
memo1.Lines.Add('delka sms :'+pdu[2]);
com.ATCommand('AT+CMGS='+pdu[2]+#13+pdu[1]+#26);

tady to neprobehne ok

P.




Odpovedá: Roman

2. 8. 2004 12:17

> Staci kdyz nastavis parametry hyperterminalu tak jak potrebujes a pak
> jen pises do okna napr. ATI0 ENTER a cekal na odpoved od mobilu
>
> Jinak problem mas v tom, ze mobilu toho cpes moc naraz !!!
>
> Musis mu poslat 'AT+CMGS=' + pdu[2] + #13 , potom pockat na jeho
> odpoved, tj. mobil ti hodi znak ">" a teprve potom mu muzes poslat
> pdu[1] + #26

Jak toho cekani na znak dosahnout pomoci Synaser?

Roman


Odpovedá: Daniel Rott

2. 8. 2004 12:05

> pdu := Text2pdu1.texttosms('+420602909909','+420723401815','prvni SMS');
> Jen nevim co je pdu[2] a pdu[1] .... pdu[2] by mela byt delka sms a
> pdu[1] vlastni obsah sms ...

Tohle take nevim, jenom bych upresnil, ze pdu[2] by mela byt delka PDU
v bajtech bez SMSC hlavicky, a pdu[1] vlastni PDU vcetne SMSC hlavicky ...

Daniel
---------------------------------------------------------------
Scanning complete: NO intelligent life form in range.



Odpovedá: Ing. Radek Tomsik

2. 8. 2004 12:47

Tak to ti neporadim, synaser neznam ... pouzivam komponentu TCommPort a
tam je udalost OnReceive ...

Radek

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Roman
Sent: Monday, August 02, 2004 12:53 PM
To: delphi-l@clexpert.cz
Subject: Re: SMS pres NOKIA 7650

> Musis mu poslat 'AT+CMGS=' + pdu[2] + #13 , potom pockat na jeho
> odpoved, tj. mobil ti hodi znak ">" a teprve potom mu muzes poslat
> pdu[1] + #26

Jak toho cekani na znak dosahnout pomoci Synaser?

Roman



Odpovedá: Lukas Gebauer

2. 8. 2004 12:50

> > Musis mu poslat 'AT+CMGS=' + pdu[2] + #13 , potom pockat na jeho
> > odpoved, tj. mobil ti hodi znak ">" a teprve potom mu muzes poslat
> > pdu[1] + #26
>
> Jak toho cekani na znak dosahnout pomoci Synaser?

No, nechytil jsem zacatek, ale predpokladam, ze to cekani na znak
neni nikterak prehnane dlouhe, jde spise na cekani nez mobil zpracuje
ten pozadavek, ne?

Pak totiz nemusis cekat na nic, rovnou po odeslani dat muzes zavolat
treba RecvByte(5000), Synaser pocka na ten znak za tebe! Mnou uvadeny
priklad znamena, ze synaser bude cekat na ten jeden byte dat po dobu
maximalne 5 vterin. pokud do peti vterin neprijde odpoved, budes mit
v lasterror chybu timeoutu. (pochopitelne, pokud je 5 vterin malo,
nastav si tam kolik potrebujes.)


--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.


Odpovedá: Ing. Radek Tomsik

2. 8. 2004 13:16

Hm, ta odpoved prijde tak do 1-2 s ... jde presne o to, az mobil
zpracuje poyadavek ...
Radek

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Lukas Gebauer
Sent: Monday, August 02, 2004 1:43 PM
To: delphi-l@clexpert.cz
Subject: Re: SMS pres NOKIA 7650


No, nechytil jsem zacatek, ale predpokladam, ze to cekani na znak
neni nikterak prehnane dlouhe, jde spise na cekani nez mobil zpracuje
ten pozadavek, ne?

Pak totiz nemusis cekat na nic, rovnou po odeslani dat muzes zavolat
treba RecvByte(5000), Synaser pocka na ten znak za tebe! Mnou uvadeny
priklad znamena, ze synaser bude cekat na ten jeden byte dat po dobu
maximalne 5 vterin. pokud do peti vterin neprijde odpoved, budes mit
v lasterror chybu timeoutu. (pochopitelne, pokud je 5 vterin malo,
nastav si tam kolik potrebujes.)


--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.



Odpovedá: Roman

2. 8. 2004 12:59

>>> Musis mu poslat 'AT+CMGS=' + pdu[2] + #13 , potom pockat na jeho
>>> odpoved, tj. mobil ti hodi znak ">" a teprve potom mu muzes poslat
>>> pdu[1] + #26
>>
>> Jak toho cekani na znak dosahnout pomoci Synaser?
>
> No, nechytil jsem zacatek, ale predpokladam, ze to cekani na znak
> neni nikterak prehnane dlouhe, jde spise na cekani nez mobil zpracuje
> ten pozadavek, ne?
>
> Pak totiz nemusis cekat na nic, rovnou po odeslani dat muzes zavolat
> treba RecvByte(5000), Synaser pocka na ten znak za tebe! Mnou uvadeny
> priklad znamena, ze synaser bude cekat na ten jeden byte dat po dobu
> maximalne 5 vterin. pokud do peti vterin neprijde odpoved, budes mit
> v lasterror chybu timeoutu. (pochopitelne, pokud je 5 vterin malo,
> nastav si tam kolik potrebujes.)

Cekani neni dlouhe, spis naopak, tzn. zavolat:
ser.ATCommand('AT+CMGS='+IntToStr(delka)+#13);
ser.RecvByte(5000);
ser.ATCommand(pdu+#26);

Nemuze ten byte prijit drive nez je zavolano RecvByte (ted to bohuzel
nemuzu vyzkouset)? Napr. T610 via bluetooth reaguje prakticky "ihned", S35
si dava uz trosku nacas (cca 1s).

Roman


Odpovedá: Pavel Z.

2. 8. 2004 13:51

Tak takhle uz to slape, teda ne uplne, jiz hlasi OK provedene prikazy, ale
neprichazi zadna SMS, ale jeste mam dotaz, jak mohu otestovat, ze mobil
odpovedel znakem ">" ?

Diky
P.

procedure TForm1.btTestClick(Sender: TObject);
var
    com:TBlockSerial;
    pdu: tpdu;
begin
    memo1.Clear;
    com:=TBlockSerial.Create;
        com.Connect('COM'+lbed1.Text);
        com.AtTimeout:=5000;
        com.config(19200, 8, 'N', 0, false, false);
        com.ATCommand('AT+CMGL=1' );
        if (com.LastError <> 0) or (not com.ATResult) then
          memo1.Lines.Add('chyba: ' + InTtoStr(com.LastError) + ' - ' +
com.GetErrorDesc(com.LastError))
        else
        begin
            memo1.Lines.Add('spojeno');
            application.ProcessMessages;
            pdu :=
Text2pdu1.texttosms('420602909909','420724333135','prvni
SMS');
            memo1.Lines.Add('sms pdu format :'+pdu[1]);
            memo1.Lines.Add('delka sms :'+pdu[2]);
            com.ATCommand('AT+CMGS='+pdu[2]+#13);
            //Statusbar1.Panels[0].Text :=
'WaitingData:
'+IntTostr(com.WaitingData);
            //com.RecvByte(1000);
            com.ATCommand(pdu[1]+#26);
            //Statusbar1.Panels[1].Text :=
'WaitingData:
'+IntTostr(com.WaitingData);
            //com.RecvByte(1000);
            if com.ATResult then
memo1.Lines.Add('odeslani SMS
vyslo'+#$D#$A+com.LastErrorDesc) else
memo1.Lines.Add('odeslani SMS
nevyslo'+#$D#$A+com.LastErrorDesc);Sleep(10000);Application.Terminate;
        end;
    com.Free;
end;

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Roman
Sent: Monday, August 02, 2004 1:59 PM
To: delphi-l@clexpert.cz
Subject: Re: SMS pres NOKIA 7650

>>> Musis mu poslat 'AT+CMGS=' + pdu[2] + #13 , potom pockat na jeho
>>> odpoved, tj. mobil ti hodi znak ">" a teprve potom mu muzes poslat
>>> pdu[1] + #26
>>
>> Jak toho cekani na znak dosahnout pomoci Synaser?
>
> No, nechytil jsem zacatek, ale predpokladam, ze to cekani na znak
> neni nikterak prehnane dlouhe, jde spise na cekani nez mobil zpracuje
> ten pozadavek, ne?
>
> Pak totiz nemusis cekat na nic, rovnou po odeslani dat muzes zavolat
> treba RecvByte(5000), Synaser pocka na ten znak za tebe! Mnou uvadeny
> priklad znamena, ze synaser bude cekat na ten jeden byte dat po dobu
> maximalne 5 vterin. pokud do peti vterin neprijde odpoved, budes mit
> v lasterror chybu timeoutu. (pochopitelne, pokud je 5 vterin malo,
> nastav si tam kolik potrebujes.)

Cekani neni dlouhe, spis naopak, tzn. zavolat:
ser.ATCommand('AT+CMGS='+IntToStr(delka)+#13);
ser.RecvByte(5000);
ser.ATCommand(pdu+#26);

Nemuze ten byte prijit drive nez je zavolano RecvByte (ted to bohuzel
nemuzu vyzkouset)? Napr. T610 via bluetooth reaguje prakticky "ihned", S35
si dava uz trosku nacas (cca 1s).

Roman




Odpovedá: Lukas Gebauer

2. 8. 2004 13:55

> Cekani neni dlouhe, spis naopak, tzn. zavolat:
> ser.ATCommand('AT+CMGS='+IntToStr(delka)+#13);
> ser.RecvByte(5000);
> ser.ATCommand(pdu+#26);
>
> Nemuze ten byte prijit drive nez je zavolano RecvByte (ted to bohuzel
> nemuzu vyzkouset)? Napr. T610 via bluetooth reaguje prakticky "ihned",
> S35 si dava uz trosku nacas (cca 1s).

Prijde-li ten znak drive, nez zavolas to RecvByte, tak to vubec
NEVADI.  



--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.


Odpovedá: Roman

2. 8. 2004 14:11

>> Cekani neni dlouhe, spis naopak, tzn. zavolat:
>> ser.ATCommand('AT+CMGS='+IntToStr(delka)+#13);
>> ser.RecvByte(5000);
>> ser.ATCommand(pdu+#26);
>>
>> Nemuze ten byte prijit drive nez je zavolano RecvByte (ted to
>> bohuzel nemuzu vyzkouset)? Napr. T610 via bluetooth reaguje
>> prakticky "ihned", S35 si dava uz trosku nacas (cca 1s).
>
> Prijde-li ten znak drive, nez zavolas to RecvByte, tak to vubec
> NEVADI.  

Ok, ve vyse uvedem pripade RecvByte skonci na timeout, takze to nevadi.
Pokud bude osetrene lasterror (jako ze by melo), pak SMS neodeslu, tzn.
modem neodpovida.

Roman


Odpovedá: Lukas Gebauer

2. 8. 2004 15:34

> >> Cekani neni dlouhe, spis naopak, tzn. zavolat:
> >> ser.ATCommand('AT+CMGS='+IntToStr(delka)+#13);
> >> ser.RecvByte(5000);
> >> ser.ATCommand(pdu+#26);
> >>
> >> Nemuze ten byte prijit drive nez je zavolano RecvByte (ted to
> >> bohuzel nemuzu vyzkouset)? Napr. T610 via bluetooth reaguje
> >> prakticky "ihned", S35 si dava uz trosku nacas (cca 1s).
> >
> > Prijde-li ten znak drive, nez zavolas to RecvByte, tak to vubec
> > NEVADI.  
>
> Ok, ve vyse uvedem pripade RecvByte skonci na timeout, takze to
> nevadi. Pokud bude osetrene lasterror (jako ze by melo), pak SMS
> neodeslu, tzn. modem neodpovida.

Ono to skoci na timeout, protoze ten retezec pred tim posilas pres
ATCommmand coz je metoda, ktera odesle data a cekna na 'OK', 'ERROR'
ci jinou podobnou odpoved od modemu. To ty ted ale nechces, protoze
ocekavas zcela jinou odpoved, konkretne '>'.

proto misto ATCommand odesilej ten AT prikaz pomoci SendString.

--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.


Odpovedá: Pavel Z.

2. 8. 2004 16:10

JO, s tim SendString to probehne OK, ale nejak mi neprichazi SMSka, da se to
jeste nejak otestovat ? abych se dozvedel, co se stalo s tou SMS ?  

P.


-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Lukas Gebauer
Sent: Monday, August 02, 2004 3:54 PM
To: delphi-l@clexpert.cz
Subject: Re: SMS pres NOKIA 7650

> >> Cekani neni dlouhe, spis naopak, tzn. zavolat:
> >> ser.ATCommand('AT+CMGS='+IntToStr(delka)+#13);
> >> ser.RecvByte(5000);
> >> ser.ATCommand(pdu+#26);
> >>
> >> Nemuze ten byte prijit drive nez je zavolano RecvByte (ted to
> >> bohuzel nemuzu vyzkouset)? Napr. T610 via bluetooth reaguje
> >> prakticky "ihned", S35 si dava uz trosku nacas (cca 1s).
> >
> > Prijde-li ten znak drive, nez zavolas to RecvByte, tak to vubec
> > NEVADI.  
>
> Ok, ve vyse uvedem pripade RecvByte skonci na timeout, takze to
> nevadi. Pokud bude osetrene lasterror (jako ze by melo), pak SMS
> neodeslu, tzn. modem neodpovida.

Ono to skoci na timeout, protoze ten retezec pred tim posilas pres
ATCommmand coz je metoda, ktera odesle data a cekna na 'OK', 'ERROR'
ci jinou podobnou odpoved od modemu. To ty ted ale nechces, protoze
ocekavas zcela jinou odpoved, konkretne '>'.

proto misto ATCommand odesilej ten AT prikaz pomoci SendString.

--
Lukas Gebauer.

E-mail: gebauerl@mlp.cz
http://www.ararat.cz/synapse/ - Ararat Synapse - TCP/IP Lib.




Odpovedá: Tomas Rosa

2. 8. 2004 21:38


>com.ATCommand('AT+CMGS='+pdu[2]+#13+pdu[1]+#26);
>
>tady to neprobehne ok

odpoved uz tu nekolikrat byla -

MUSIS POCKAT NA REAKCI MODEMU

konkretne:

TY: AT+CMGS=xxx
MODEM: >
TY: 0071000C9124707777279600F5FF4.....01
TY: CTRL+Z (#26)
MODEM: +CMGS: zz
MODEM: OK

kde XXX je delka PDU (bez hlavicky ohledne SMSC & spol) a ZZ je ID kterou
modem teto SMSce pridelil (pro parovani dorucenky).





                                        S pozdravem
                                                Tomas Rosa

------------------------=[ pinknet on every screen]=-----------------------
Tomas Rosa
Tomas.Rosa@PinkNet.cz http://www.pnws.org
+420 602 860 704
PinkNet Web Server for Win32 - FREEWARE www.pnws.org
---------------------------------------------------------------------------